function rmiSync2Doors(modelName)
%RMISYNC2DOORS 与DOORS系统同步模型需求
%   此函数将Simulink模型中的需求链接与DOORS（Dynamic Object Oriented Requirements System）
%   进行同步，确保需求追踪的一致性和最新性。
%
%语法:
%   rmiSync2Doors(modelName)
%
%输入参数:
%   modelName - Simulink模型名称（字符串）
%
%输出参数:
%   无
%
%说明:
%   - 创建RMI DOORS同步配置对象
%   - 设置同步参数和选项
%   - 执行从Simulink到DOORS的单向同步
%   - 保存模型和代理文件的更改
%   - 清理DOORS中的过时链接
%
%同步配置:
%   - surrogatePath: 代理文件路径模式 './$ModelName$'
%   - detailLevel: 详细级别设为1（标准详细度）
%   - doorsToSl: false（不从DOORS同步到Simulink）
%   - slToDoors: true（从Simulink同步到DOORS）
%   - purgeSimulink: 0（不清理Simulink中的链接）
%   - purgeDoors: 1（清理DOORS中的无效链接）
%   - saveModel: 1（保存模型文件）
%   - saveSurrogate: 1（保存代理文件）
%
%同步方向:
%   此配置执行单向同步（Simulink → DOORS）：
%   - 将Simulink中的需求链接推送到DOORS
%   - 不会从DOORS拉取更改到Simulink
%   - 适用于以Simulink模型为主的开发流程
%
%代理文件:
%   代理文件是DOORS与Simulink之间的中间文件，
%   包含需求链接信息和同步状态。
%
%使用场景:
%   - 需求变更后的追踪性更新
%   - 定期的需求同步维护
%   - 项目里程碑前的需求验证
%   - 审计和合规性检查准备
%   - 团队协作中的需求状态同步
%
%DO-178C要求:
%   在DO-178C标准中，需求追踪性是关键要求。
%   定期同步确保需求变更被正确跟踪和验证。
%
%示例:
%   % 基本同步操作
%   rmiSync2Doors('MyModel');
%   fprintf('模型 %s 已与DOORS同步\n', 'MyModel');
%
%   % 批量同步多个模型
%   models = getModelList();
%   for i = 1:length(models)
%       try
%           rmiSync2Doors(models{i});
%           fprintf('✓ %s DOORS同步完成\n', models{i});
%       catch ME
%           fprintf('✗ %s DOORS同步失败: %s\n', models{i}, ME.message);
%       end
%   end
%
%   % 需求管理工作流中的使用
%   function requirementsWorkflow(modelName)
%       fprintf('开始需求管理工作流: %s\n', modelName);
%       
%       % 1. 设置需求管理接口
%       rmiSetup();
%       
%       % 2. 同步到DOORS
%       rmiSync2Doors(modelName);
%       
%       % 3. 验证需求覆盖
%       verifyModel2Reqs(modelName);
%       
%       fprintf('需求管理工作流完成\n');
%   end
%
%   % 项目里程碑前的同步检查
%   function milestoneSync(milestone)
%       fprintf('里程碑 %s 前的需求同步...\n', milestone);
%       
%       models = getModelList();
%       syncResults = containers.Map();
%       
%       for i = 1:length(models)
%           try
%               rmiSync2Doors(models{i});
%               syncResults(models{i}) = 'SUCCESS';
%           catch ME
%               syncResults(models{i}) = ME.message;
%           end
%       end
%       
%       % 生成同步报告
%       generateSyncReport(syncResults, milestone);
%   end
%
%错误处理:
%   如果DOORS服务器不可用或连接失败，函数会抛出异常。
%   建议在自动化脚本中使用try-catch处理。
%
%先决条件:
%   - DOORS服务器必须运行且可访问
%   - 模型必须已经建立与DOORS的初始连接
%   - 需要适当的DOORS访问权限
%   - RMI DOORS工具箱必须正确配置
%
%性能考虑:
%   大型模型的同步可能需要较长时间，特别是
%   当需要处理大量需求链接时。
%
%文件操作:
%   同步过程会修改模型文件和代理文件，
%   确保文件未被其他应用程序锁定。
%
%依赖项:
%   rmidoors.synchronize - RMI DOORS同步函数
%
%参见:
%   rmiSetup, rmiReset, verifyModel2Reqs, rmidoors.synchronize
%

%版本: 1.0
%日期: 2021-2024
%


% Create a configuration for RMI DOORS synchronization.
syncCfg = rmidoors.synchronize(modelName, 'settings');
syncCfg.surrogatePath = './$ModelName$';
syncCfg.detailLevel = 1;
syncCfg.doorsToSl = false;
syncCfg.slToDoors = true;
syncCfg.purgeSimulink = 0;
syncCfg.purgeDoors = 1;
syncCfg.saveModel = 1;
syncCfg.saveSurrogate = 1;

% Synchronize the model with DOORS.
rmidoors.synchronize(modelName, syncCfg);

end
